home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 80 / XENIATGM80.iso / Goodies / Blood 2 / Source / data.z / BloodClientShell.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-04-02  |  21.8 KB  |  691 lines

  1. #ifndef __BLOODCLIENTSHELL_H__
  2. #define __BLOODCLIENTSHELL_H__
  3.  
  4. #include <stdio.h>
  5. #include <math.h>
  6. #include <mbstring.h>
  7. #include "cpp_clientshell_de.h"
  8. #include "MainMenus.h"
  9. #include "SharedDefs.h"
  10. #include "MessageMgr.h"
  11. #include "NewStatusBar.h"
  12. #include "CommLink.h"
  13. #include "ViewWeapon.h"
  14. #include "SFXMgr.h"
  15. #include "PlayerCamera.h"
  16. #include "ContainerCodes.h"
  17. #include "LoadSave.h"
  18. #include "Music.h"
  19. #include "CameraFX.h"
  20. #include "viewcreature.h"
  21. #include "FragInfo.h"
  22. #include "Credits.h"
  23. #include "VoiceMgr.h"
  24. #include "LTGUIMgr.h"
  25. #include "MessageBoxHandler.h"
  26. #include "TeamMgr.h"
  27.  
  28.  
  29. // game version
  30. #ifdef _DEMO
  31. #define version_string "DEMO v1.0a (Build 109)"
  32. #else
  33. #ifdef _ADDON
  34. #define version_string "NIGHTMARES v1.0.233"
  35. #else
  36. #define version_string "v2.1.233"
  37. #endif
  38. #endif
  39.  
  40.  
  41. // game states
  42. #define GS_NONE                 666        // No game state
  43. #define GS_PLAYING                0        // Playing the game
  44. #define GS_MENU                    1        // Running the menu
  45. #define GS_MENUANIM                2        // Menu is sliding onto the screen
  46. #define    GS_LOADINGLEVEL            3        // Waiting for a new level to load
  47. #define GS_SAVING                4        // Waiting for a save game acknowledgement
  48. #define GS_MPLOADINGLEVEL        5        // Loading a multiplayer level
  49. #define GS_CREDITS                6        // Credits screen
  50. #define GS_MOVIES                7        // Logo movies
  51. #define GS_SPLASH                8        // Splash screen displayed
  52. #define GS_WAITING                9        // Waiting for a key press
  53. #define GS_MPCHANGINGLEVELS        10        // Changing levels in a multiplayer game
  54.  
  55. #define CLIENTWEAPONSLOTS        18    // 10 standard slots, plus inventory weapons
  56. #define CLIENTITEMSLOTS            6
  57. #define CLIENTSPELLSLOTS        6
  58. #define    CLIENTBINDINGSLOTS        3
  59.  
  60. #define DETAIL_LOW                0
  61. #define DETAIL_MEDIUM            1
  62. #define DETAIL_HIGH                2
  63.  
  64. // Message box command ID
  65. #define MESSAGE_BOX_ID_KILL        1
  66.  
  67. // Structure to hold data read from the player.cfg file
  68. struct ConfigStruct 
  69. {
  70.         ConfigStruct()
  71.         {
  72.             memset(this, 0, sizeof(ConfigStruct));
  73.             nStrength = nSpeed = nMagic = nResistance = 1;
  74.             _mbscpy((unsigned char*)szName, (const unsigned char*)"New Player");
  75.         }
  76.         DBYTE    nStrength;
  77.         DBYTE    nSpeed;
  78.         DBYTE    nMagic;
  79.         DBYTE    nResistance;
  80.         DBYTE    nCharacter;
  81.         DBYTE    nSkin;
  82.         char    szName[MAX_PLAYERNAME_LEN];
  83.         DBYTE    nWeaponSlots[CLIENTWEAPONSLOTS];
  84.         DBYTE    nItemSlots[CLIENTITEMSLOTS];
  85.         DBYTE    nSpellSlots[CLIENTSPELLSLOTS];
  86.         DBYTE    nProximityBombs;
  87.         DBYTE    nRemoteBombs;
  88.         DBYTE    nSmokeBombs;
  89.         DBYTE    nTimeBombs;
  90.         DBYTE    nBindingSlots[CLIENTBINDINGSLOTS];
  91. }; 
  92.  
  93. //DBOOL LoadConfig(char* pfilename, ConfigStruct *pConfig);
  94.  
  95. // Structure to hold various data items sent by the client
  96. typedef struct
  97. {
  98.         DBYTE            byFlags;
  99.         DFLOAT            fPitch;
  100.         DFLOAT            fYaw;
  101.         DVector            GunMuzzlePos;
  102.         DVector            lGunMuzzlePos;
  103.         DFLOAT            MouseAxis0;
  104.         DFLOAT            MouseAxis1;
  105.         ContainerCode    eContainer;
  106.         HOBJECT            hContainerAtBottom;
  107. } ClientData;
  108.  
  109. // Abort function prototypes.
  110. void Abort(char* sErrorMsg, DDWORD dwCode);
  111. void Abort(int nErrorID, DDWORD dwCode);
  112.  
  113. class CMoveMgr;
  114.  
  115. // Definition of the client shell structure.
  116. class CBloodClientShell : public CClientShellDE
  117. {
  118.     public:
  119.  
  120.         CBloodClientShell();
  121.         ~CBloodClientShell();
  122.         void            CSPrint (char* msg, ...);
  123.         void            CSPrint (int nStringID);
  124.         void            CSPrint2 (char* msg);
  125.  
  126.         CVoiceMgr*        GetVoiceMgr() { return &m_VoiceMgr; }
  127.         CTeamMgr*        GetTeamMgr() { return &m_TeamMgr; }
  128.         CSFXMgr*        GetSFXMgr() { return &m_sfxMgr; }
  129.         HLOCALOBJ        GetCameraObj() { return m_hCamera; }
  130.         CSavedGameInfo*    GetSavedGameInfo() { return &m_SavedGameInfo; }
  131.         void            ShakeScreen(DVector *vShake, DFLOAT fTime);
  132.         void            FlashScreen(DVector *vFlashColor, DFLOAT fTime, DFLOAT fRampUp);
  133.  
  134.         void            UpdateWonkyVision(DBOOL bUpdate=DTRUE);        //for thief attaching
  135.         DBOOL            IsWonky() { return(m_bWonkyVision); }
  136.         DBOOL            IsWonkyVision() { return(m_bWonkyVision); }
  137.         DBOOL            IsWonkyNoMove() { return(m_bWonkyNoMove); }
  138.         void            StartWonkyVision(DFLOAT fWonkyTime, DBOOL bNoMove);
  139.         void            EndWonkyVision();
  140.  
  141.         DVector            GetLightScale()                        {return m_vLightScale;}
  142.  
  143.         void            RemoveCreature()        {delete m_pCreature; m_pCreature = DNULL;}
  144.  
  145.         void            StartNewGame(char *pszWorld);
  146.         DBOOL            StartNewWorld(char *pszWorld, DBYTE nGameType, DBYTE nLoadType, DBYTE nDifficulty = DIFFICULTY_EASY);
  147.         DRESULT            InitSound();
  148.  
  149.         HSOUNDDE        PlaySound(char* sSound, DBOOL bStream=DFALSE, DBOOL bLoop=DFALSE, DBOOL bGetHandle=DFALSE);
  150.  
  151.         void            DisplayStatusBarFlagIcon(DBOOL bDisplay);
  152.  
  153.         void            AssignFrags(DDWORD dwLocalID, DDWORD dwVictim, DDWORD dwKiller);
  154.  
  155.         DBOOL            SetCharacterInfo(int nCharacter, int nSkin);
  156.  
  157.         void            ResetPlayerInventory();
  158.  
  159.         // Advanced options from launcher
  160.         DBOOL            AdvancedDisableMusic()            { return m_bAdvancedDisableMusic; }
  161.         DBOOL            AdvancedDisableSound()            { return m_bAdvancedDisableSound; }
  162.         DBOOL            AdvancedDisableMovies()            { return m_bAdvancedDisableMovies; }
  163.         DBOOL            AdvancedDisableJoystick()        { return m_bAdvancedDisableJoystick; }
  164.         DBOOL            AdvancedEnableOptSurf()            { return m_bAdvancedEnableOptSurf; }
  165.         DBOOL            AdvancedDisableLightMap()        { return m_bAdvancedDisableLightMap; }
  166.         DBOOL            AdvancedEnableTripBuf()            { return m_bAdvancedEnableTripBuf; }
  167.         DBOOL            AdvancedDisableDx6Cmds()        { return m_bAdvancedDisableDx6Cmds; }
  168.         DBOOL            AdvancedEnableTJuncs()            { return m_bAdvancedEnableTJuncs; }
  169.         DBOOL            AdvancedDisableFog()            { return m_bAdvancedDisableFog; }
  170.         DBOOL            AdvancedDisableLines()            { return m_bAdvancedDisableLines; }
  171.         DBOOL            AdvancedDisableModelFB()        { return m_bAdvancedDisableModelFB; }
  172.         DBOOL            AdvancedEnablePixelDoubling()    { return m_bAdvancedEnablePixelDoubling; }
  173.         DBOOL            AdvancedEnableMultiTexturing()    { return m_bAdvancedEnableMultiTexturing; }
  174.  
  175.         // Movie stuff
  176.         DBOOL            PlayMovie(CClientDE* pClientDE, char* sMovie, DBOOL bCheckExistOnly = DFALSE);
  177.         DBOOL            StartMovies(CClientDE* pClientDE);
  178.         DBOOL            EndMovies(CClientDE* pClientDE, DBOOL bShowTitle = DFALSE);
  179.         DBOOL            AdvanceMovies(CClientDE* pClientDE);
  180.         void            UpdateMoviesState();
  181.  
  182.         // Menu execute functions
  183.         DBOOL            MenuQuit();
  184.         DBOOL            MenuNewGame(int nDifficulty, int nCharacter = CHARACTER_CALEB, int nGameType = GAMETYPE_SINGLE);
  185.         DBOOL            MenuNewNightmaresGame(int nDifficulty);
  186.         DBOOL            MenuHostGame();
  187.         DBOOL            MenuJoinGame();
  188.         DBOOL            MenuCredits();
  189.         DBOOL            MenuHelp();
  190.         DBOOL            MenuLoadGame(int nSlot);
  191.         DBOOL            MenuSaveGame(int nSlot, DBYTE bySaveType = SAVETYPE_CURRENT);
  192.         DBOOL            MenuLoadCustomLevel(char* sLevel, int nDifficulty);
  193.         DBOOL            MenuReturnToGame();
  194.         DBOOL            MenuSetDetail();
  195.  
  196.         // Mouse access
  197.         void            SetMouseSensitivity(float fSpeed);
  198.         float            GetMouseSensitivity();
  199.         DBOOL            IsMouseInvertYAxis()                    { return m_bMouseInvertYAxis; }
  200.         void            SetMouseInvertYAxis(DBOOL bInvert)        { m_bMouseInvertYAxis=bInvert; }
  201.         DBOOL            IsMouseLook()                            { return m_bMouseLook; }
  202.         void            SetMouseLook(DBOOL bMouseLook)            { m_bMouseLook=bMouseLook; }
  203.         DBOOL            IsLookSpring()                            { return m_bLookSpring; }
  204.         void            SetLookSpring(DBOOL bLookSpring)        { m_bLookSpring=bLookSpring; }
  205.  
  206.         // Joystick routines
  207.         DBOOL            IsUseJoystick()                            { return m_bUseJoystick; }
  208.         void            SetUseJoystick(DBOOL bUseJoystick);
  209.  
  210.         // Keyboard stuff
  211.         float            GetKeyboardTurnRate()                    { return m_fKeyboardTurnRate; }
  212.         void            SetKeyboardTurnRate(float fRate);
  213.  
  214.         // Puts a message box on the screen.  It is removed when ENTER, ESC, or SPACE is pressed
  215.         // or on the next page flip if bAsync is FALSE.
  216.         void            DoMessageBox(char *lpszMessage, DBOOL bAsync=DTRUE);
  217.         
  218.         // Kills the message box on the screen
  219.         void            KillMessageBox();
  220.  
  221.         // Game state management
  222.         int                GetGameState()                            { return(m_nGameState); }
  223.         DBOOL            SetGameState(int nState);
  224.  
  225.         // Determines if we are in a multiplayer game
  226.         int                GetGameType() { return(m_nGameType); }
  227.         DBOOL            IsMultiplayerGame();
  228.         DBOOL            IsMultiplayerTeamBasedGame();
  229.         DBOOL            IsMultiplayerTeams() { return(m_nGameType == NGT_TEAMS); }
  230.         DBOOL            IsMultiplayerCtf() { return(m_nGameType == NGT_CAPTUREFLAG); }
  231.  
  232.         // Access to member variables
  233.         DBOOL            IsInWorld()                                { return m_bInWorld; }
  234.         DBOOL            IsDead()                                { return m_bDead; }
  235.         DBOOL            IsTrapped()                                { return (DBOOL)m_nTrapped; }
  236.         void            IgnoreKeyboardMessage(DBOOL bIgnore)    { m_bIgnoreKeyboardMessage=bIgnore; }
  237.         DBYTE            GetGlobalDetail()                        { return m_nGlobalDetail; }
  238.         DBOOL            NightGogglesActive( )                    { return m_bNightGogglesActive; }
  239.         DBOOL            BinocularsActive( )                        { return m_bBinocularsActive; }
  240.         DBOOL            IsPaused()                                { return m_bPaused; }
  241.         DBOOL            IsExternalCamera()                        { return !!m_pExternalCamera; }
  242.         DBOOL            IsSpectatorMode()                        { return m_bSpectatorMode; }
  243.         DBOOL            IsZoomed()                                { return m_bZoomView; }
  244.  
  245.         DBOOL            IsNetFriendlyFire() { return(m_bNetFriendlyFire); }
  246.         DBOOL            IsNetNegTeamFrags() { return(m_bNetNegTeamFrags); }
  247.         DBOOL            IsNetOnlyFlagScores() { return(m_bNetOnlyFlagScores); }
  248.         DBOOL            IsNetOnlyGoalScores() { return(m_bNetOnlyGoalScores); }
  249.  
  250.  
  251.         // New physics stuff
  252.         DBYTE            GetCDataFlags() { return cdata.byFlags; }
  253.         void            GetCameraRotation(DRotation *pRot);
  254.         ContainerCode    GetCurContainerCode() const { return m_eCurContainerCode; }
  255.  
  256.         void            SetVelMagnitude(DFLOAT fMag) { m_fVelMagnitude = fMag; }
  257.         DFLOAT            GetEyeLevel() { return m_fEyeLevel; }
  258.         DBYTE            GetCharacter() { return m_Config.nCharacter; }
  259.         void            SetPowerBarLevel(DFLOAT fPercent);
  260.  
  261.         DDWORD            GetAmmo() { return m_dwAmmo; }
  262.         DDWORD            GetAltAmmo() { return m_dwAltAmmo; }
  263.  
  264.     protected:
  265.     
  266.         DRESULT            OnEngineInitialized(RMode *pMode, DGUID *pAppGuid);
  267.         void            OnEngineTerm();
  268.         void            OnEnterWorld();
  269.         void            OnExitWorld();
  270.         void            OnEvent(DDWORD dwEventID, DDWORD dwParam);
  271.         void            UpdateCamera();
  272.         void            FirstUpdate();
  273.         void            Update();
  274.         void            PostUpdate();
  275.         void            UpdateCredits();
  276.         DRESULT            OnObjectMove(HOBJECT hObj, DBOOL bTeleport, DVector *pPos);
  277.         DRESULT            OnObjectRotate(HOBJECT hObj, DBOOL bTeleport, DRotation *pNewRot);
  278.         void            PreLoadWorld(char *pWorldName);
  279.         void            OnCommandOn(int command);
  280.         void            OnCommandOff(int command);
  281.         void            OnKeyDown(int key, int rep);
  282.         void            OnKeyUp(int key);
  283.         void            OnMessage(DBYTE messageID, HMESSAGEREAD hMessage);
  284.         void            SpecialEffectNotify(HLOCALOBJ hObj, HMESSAGEREAD hMessage);
  285.         void            OnObjectRemove(HLOCALOBJ hObj);
  286.         void            OnModelKey(HLOCALOBJ hObj, ArgList *pArgs);
  287.  
  288.         void            SendPlayerUpdateMessage(DBOOL bSendAll);
  289.         void            SendPlayerInitMessage(DBYTE messageID);
  290.  
  291.         // Get the mouse device name and axis names
  292.         void            GetMouseDeviceInfo(char *lpszDeviceName, int nDeviceBufferSize,
  293.                                            char *lpszXAxis,         int nXAxisBufferSize,
  294.                                            char *lpszYAxis,         int nYAxisBufferSize);
  295.  
  296.         void            UpdateSoundReverb( );
  297.  
  298.     private:
  299.  
  300.         void            InitSinglePlayer();
  301.         void            InitMultiPlayer();
  302.         void            UpdateBob();
  303.         void            UpdateHeadCant();
  304.         DBOOL            UpdatePlayerCamera();
  305.         void            SetCameraStuff(HLOCALOBJ hPlayerObj, HLOCALOBJ hCamera);
  306.         void            UpdateGun(DRotation *rot, DVector *pos);
  307.         void            ChangeWeapon(DBYTE slot);
  308.         void            PauseGame (DBOOL bPause);
  309.         void            UpdateScreenShake();
  310.         void            UpdateScreenFlash();
  311.         void            UpdateContainerFX();
  312.         void            UpdateUnderWaterFX(DBOOL bUpdate=DTRUE);
  313.         void            HandleExitWorld(HMESSAGEREAD hMessage);
  314.         DBOOL            StartNewGame(char *pszWorldName, DBYTE nStartType, DBYTE nGameType, DBYTE nLoadType, DBYTE nDifficulty);
  315.         void            ShowPlayer(DBOOL bShow);
  316.         void            DrawLoadingScreen();
  317.         DBOOL            DoMultiplayer(DBOOL bMinimize, DBOOL bHost);
  318.  
  319.         void            HandleInvAction( DBYTE nType, DBOOL bActivate );
  320.  
  321.         void            ShowInfoBox(char *lpszMessage, DBOOL bCloseButton);
  322.         void            KillInfoBox();
  323.         DBOOL            HandleFiring();
  324.         CViewWeapon*    CreateWeapon(DBYTE byType, DBOOL bLeftHand);
  325.  
  326.  
  327.         // Internal game state management
  328.         DBOOL            TransitionGameState(int nOldState, int nNewState);
  329.         DBOOL            IsGameStateValid(int nState);
  330.  
  331.         DBOOL            OnEnterPlayingState(int nOldState);
  332.         DBOOL            OnEnterMenuState(int nOldState);
  333.         DBOOL            OnEnterMenuAnimState(int nOldState);
  334.         DBOOL            OnEnterLoadingLevelState(int nOldState);
  335.         DBOOL            OnEnterSavingState(int nOldState);
  336.         DBOOL            OnEnterMultiLoadingLevelState(int nOldState);
  337.         DBOOL            OnEnterCreditsState(int nOldState);
  338.         DBOOL            OnEnterMoviesState(int nOldState);
  339.         DBOOL            OnEnterSplashState(int nOldState);
  340.         DBOOL            OnEnterWaitingState(int nOldState);
  341.  
  342.         DBOOL            OnExitPlayingState(int nNewState);
  343.         DBOOL            OnExitMenuState(int nNewState);
  344.         DBOOL            OnExitMenuAnimState(int nNewState);
  345.         DBOOL            OnExitLoadingLevelState(int nNewState);
  346.         DBOOL            OnExitSavingState(int nNewState);
  347.         DBOOL            OnExitMultiLoadingLevelState(int nNewState);
  348.         DBOOL            OnExitCreditsState(int nNewState);
  349.         DBOOL            OnExitMoviesState(int nNewState);
  350.         DBOOL            OnExitSplashState(int nNewState);
  351.         DBOOL            OnExitWaitingState(int nNewState);
  352.  
  353.         // Load/Save stuff
  354.  
  355.         void            SaveClientData( HMESSAGEWRITE hMsg );
  356.         void            LoadClientData( HMESSAGEREAD hMsg );
  357.  
  358.  
  359.         // New camera stuff
  360.         void            Set3rdPersonCamera(DBOOL bExternal);
  361.         void            UpdateCameraPosition();
  362.         void            CalculateCameraRotation();
  363.         void            UpdateCameraRotation();
  364.         void            ResetGlobalFog();
  365.         void            GetWorldTitle(char *pWorldFile);
  366. #ifdef BRANDED
  367.         void            CreateBrandSurface();
  368.         void            DrawBrandString(HSURFACE hScreenSurface);
  369. #endif
  370.  
  371.     private:
  372.  
  373.         ClientData        cdata;
  374.         ClientData        cdataLast; 
  375.         DRotation        m_Rotation;
  376.         CViewWeapon*    m_pWeapon;            // 10 slots plus some for other weapons
  377.         CViewWeapon*    m_pLWeapon;            // left hand weapons
  378.         DBYTE            m_abyWeaponID[CLIENTWEAPONSLOTS];        // 10 slots plus some for other weapons
  379.         DBYTE            m_abyLWeaponID[CLIENTWEAPONSLOTS];        // left hand weapons
  380. //        HLOCALOBJ        m_hWeapObj;            // Weapon models
  381. //        HLOCALOBJ        m_hLWeapObj;        // Weapon models
  382.         HLOCALOBJ        m_hWeapHandObj;        // Weapon models
  383.         HLOCALOBJ        m_hLWeapHandObj;    // Weapon models
  384.         CMainMenus        m_Menu;                // pretty self-explanatory isn't it?
  385.         CMessageMgr        m_MessageMgr;
  386. //        CLevelMgr        m_LevelMgr;            // Manage the episode/level structure
  387.         CCheatMgr        m_CheatMgr;
  388.         CMusic            m_Music;
  389.         CNewStatusBar    m_NewStatusBar;
  390.         CCommLink        m_CommLink;
  391.         CFragInfo        m_FragInfo;
  392.         CCredits        m_Credits;
  393.         CVoiceMgr        m_VoiceMgr;
  394.         CTeamMgr        m_TeamMgr;
  395.  
  396.         CViewCreature*    m_pCreature;        //attach creatre (hand, thief, bone leech)
  397.  
  398.         DBOOL            m_bFirstUpdate;
  399.         DBOOL            m_bRollCredits;
  400.  
  401.         DDWORD            m_nGameState;
  402.         DDWORD            m_nHealth;
  403.         DBOOL            m_bDead;
  404.         DBOOL            m_bDeadNoHide;
  405.         DBOOL            m_bWonkyVision;
  406.         DFLOAT            m_fWonkyTime;
  407.         DBOOL            m_bWonkyNoMove;
  408.  
  409.         int                m_nCurGun;
  410.         DFLOAT            m_SpinAmount;
  411.         DBOOL            m_bZeroXAngle;
  412.         DBOOL            m_bShowCrosshair;
  413.         DBOOL            m_nCrosshair;
  414.         DBOOL            m_nLastCrosshair;
  415.         DBOOL            m_bDemoPlayback;
  416.         DBOOL            m_bShiftState;
  417.  
  418.         // Advanced console options...
  419.         DBOOL        m_bAdvancedDisableMusic;        // Disable music
  420.         DBOOL        m_bAdvancedDisableSound;        // Disable sound
  421.         DBOOL        m_bAdvancedDisableMovies;        // Disable movies
  422.         DBOOL        m_bAdvancedDisableJoystick;        // Disable joystick
  423.         DBOOL        m_bAdvancedEnableOptSurf;        // Enable optimizing surfaces
  424.         DBOOL        m_bAdvancedDisableLightMap;        // Disable light mapping
  425.         DBOOL        m_bAdvancedEnableTripBuf;        // Enable triple buffering
  426.         DBOOL        m_bAdvancedDisableDx6Cmds;        // Disable DX6 commands
  427.         DBOOL        m_bAdvancedEnableTJuncs;        // Enable T-Junction sealing (gaps between polies)
  428.         DBOOL        m_bAdvancedDisableFog;            // Disable fog
  429.         DBOOL        m_bAdvancedDisableLines;        // Disable line systems
  430.         DBOOL        m_bAdvancedDisableModelFB;        // Disable model fullbrights
  431.         DBOOL        m_bAdvancedEnablePixelDoubling;    // Enable pixel doubling
  432.         DBOOL        m_bAdvancedEnableMultiTexturing;// Enable multi-texturing
  433.  
  434.         DBOOL        m_bMusicOriginallyEnabled;            // was music originally enabled?
  435.         DBOOL        m_bSoundOriginallyEnabled;            // was sound originally enabled?
  436.         DBOOL        m_bLightmappingOriginallyEnabled;    // was lightmapping originally enabled?
  437.         DBOOL        m_bModelFBOriginallyEnabled;        // were model fullbrights originally enabled?
  438.  
  439.         DFLOAT        m_fOriginalMouseSensitivity;    // Variable to store a temp sense when zoomed
  440.         DFLOAT        m_fOriginalKeyTurnRate;            // Variable to store a temp sense when zoomed
  441.         DBOOL        m_bCrosshairOriginallyOn;        // Was the crosshair on before we zoomed in
  442.         DBYTE        m_nCrosshairOriginalNum;        // Which number was the crosshair on
  443.  
  444.         // Camera Stuff
  445.         HLOCALOBJ        m_hCamera;
  446.         HLOCALOBJ        m_hOrbObj;            // For the orb..
  447.         HLOCALOBJ        m_hLastOrbObj;        // To test if we should use that one again
  448.         HLOCALOBJ        m_hSeeingEyeObj;    // For the all-seeing eye
  449.         CPlayerCamera    m_playerCamera;        // Handle 3rd person view
  450.         DBOOL            m_b3rdPerson;
  451.         
  452.         DFLOAT            m_fLastCameraFovX;
  453.         DFLOAT            m_fLastCameraFovY;
  454.         
  455.         DDWORD            m_dwScreenWidth;
  456.         DDWORD            m_dwScreenHeight;
  457.         DBOOL            m_bHandledStartup;
  458.  
  459.         // Special FX management...
  460.  
  461.         CSFXMgr            m_sfxMgr;
  462.         DBYTE            m_nGlobalDetail;
  463.  
  464.         // Container FX helpers...
  465.  
  466.         HSOUNDDE        m_hContainerSound;    // Container sound...
  467.         ContainerCode    m_eCurContainerCode;// Code of container currently in
  468.         DFLOAT            m_fContainerStartTime; // Time we entered current container
  469.  
  470.         DFLOAT            m_fFovXFXDir;        // Variable use in UpdateUnderWaterFX()
  471.         DFLOAT            m_fLastTime;        // Variable use in UpdateUnderWaterFX()
  472.         DVector            m_vLightScale;
  473.         DVector            m_vCameraAdd;
  474.  
  475.         
  476.         // Bobbin' and Swayin'
  477.         DFLOAT            m_fPitch;
  478.         DFLOAT            m_fYaw;
  479.         DFLOAT            m_fAdjPitch;
  480.         DFLOAT            m_fAdjYaw;
  481.  
  482.         DFLOAT            m_fBobAmp;
  483.         DFLOAT            m_fBobPhase;
  484.         DFLOAT            m_fBobHeight;
  485.         DFLOAT            m_fBobWidth;
  486.         DFLOAT            m_fBobCant;
  487.         DFLOAT            m_fShakeCant;
  488.         DFLOAT            m_fSwayPhase;
  489.         DFLOAT            m_fSwayHeight;
  490.         DFLOAT            m_fSwayWidth;
  491.     
  492.         DFLOAT            m_fCantIncrement;
  493.         DFLOAT            m_fCantMaxDist;
  494.         DFLOAT            m_fCamCant;
  495.  
  496.         DBOOL            m_bShakeScreen;
  497.         DFLOAT            m_fShakeTime;
  498.         DFLOAT            m_fShakeStart;
  499.         DVector            m_vShakeMagnitude;
  500.  
  501.         DBOOL            m_bFlashScreen;
  502.         DFLOAT            m_fFlashTime;
  503.         DFLOAT            m_fFlashStart;
  504.         DFLOAT            m_fFlashRampUp;
  505.         DVector            m_vFlashColor;
  506.  
  507.         //wonky vision crap
  508.         DFLOAT            m_fOffsetX;
  509.         DFLOAT            m_fOffsetY;
  510.         DFLOAT            m_fOffsetRot;
  511.         DFLOAT            m_fRotDir;
  512.         DFLOAT            m_fMaxRot;
  513.  
  514.         // Stuff received from the player
  515.         DFLOAT            m_fEyeLevel;
  516.         DFLOAT            m_fVelMagnitude;
  517. //        DFLOAT            m_fVelY
  518.         DVector            m_vMyLastPos;
  519.  
  520.         DFLOAT            m_fViewY;
  521.         DFLOAT            m_fViewYVel;
  522.         DFLOAT            m_fWeaponY;
  523.         DFLOAT            m_fWeaponYVel;
  524.  
  525.         DBOOL            m_bSpectatorMode;
  526.         DBOOL            m_bZoomView;
  527.  
  528.         DFLOAT            m_fCameraZoom;
  529.         DFLOAT            m_fovX;
  530.         DFLOAT            m_fovY;
  531.         DFLOAT            m_DefFovX;
  532.         DFLOAT            m_fovYScale;
  533.         DFLOAT            m_fViewKick;
  534.         DFLOAT            m_fKickTime;
  535.  
  536.         HSURFACE        m_hCrosshair;
  537.         DDWORD            m_cxCrosshair;
  538.         DDWORD            m_cyCrosshair;
  539.         HSURFACE        m_hOverlayText;
  540.         HDEFONT            m_hFont;
  541.         DBOOL            m_bInWorld;
  542.         DBOOL            m_bDrawStatusBar;
  543.         DBOOL            m_bDrawFragBar;
  544.  
  545.         // Character Attibutes
  546.         ConfigStruct    m_Config;
  547.  
  548. //        DBOOL            m_bUseExternalCamera;
  549.         CCameraFX*        m_pExternalCamera;
  550.         DBOOL            m_bRenderCamera;
  551.         DBOOL            m_bStoneView;
  552.         DBOOL            m_bAuraView;
  553.         
  554.         DBOOL            m_bBurn;
  555.         DBOOL            m_bBlind;
  556.         DBOOL            m_bFadeIn;
  557.         DBOOL            m_bFadeOut;
  558.         DFLOAT            m_fFadeVal;
  559.         DFLOAT            m_fBurnTime;
  560.         DFLOAT            m_fBlindTime;
  561.  
  562.         HSURFACE        m_hLoadingScreen;
  563.         DFLOAT            m_fLoadingFadeTime;
  564.         DBOOL            m_bLoadingFadeUp;
  565.         DBOOL            m_bPlayedWaitingSound;
  566.         DFLOAT            m_fLoadDelayTime;
  567.  
  568.         HSTRING            m_hstrTitle;
  569.         HSTRING            m_hstrLoadScreen;
  570.         DDWORD            m_nLoadScreenID;
  571.  
  572.         HSTRING            m_hstrObjectivesTitle;
  573.         HSTRING            m_hstrObjectivesText;
  574.  
  575.         int                m_nLastExitType;
  576.         StartGameRequest m_Request;
  577.         DBOOL            m_bFirstWorld;
  578.         char            m_szFilename[255];
  579.  
  580.         // Sky panning attributes
  581.         DBOOL            m_bPanSky;
  582.         DFLOAT            m_fPanSkyOffsetX;
  583.         DFLOAT            m_fPanSkyOffsetZ;
  584.         DFLOAT            m_fPanSkyScaleX;
  585.         DFLOAT            m_fPanSkyScaleZ;
  586.         DFLOAT            m_fCurSkyXOffset;
  587.         DFLOAT            m_fCurSkyZOffset;
  588.  
  589.         // Load/Save game interface
  590.         CSavedGameInfo    m_SavedGameInfo;
  591.  
  592.         // Mouse
  593.         DBOOL            m_bMouseInvertYAxis;
  594.         DBOOL            m_bMouseLook;
  595.         DBOOL            m_bLookSpring;
  596.  
  597.         // Joystick
  598.         DBOOL            m_bUseJoystick;
  599.  
  600.         // Keboard
  601.         float            m_fKeyboardTurnRate;
  602.  
  603.         // Movie
  604.         int                m_nMovieState;
  605.  
  606.         // Message box
  607.         CMessageBoxHandler    m_messageBoxHandler;
  608.         CLTGUIMessageBox    m_messageBox;
  609.         CLTGUIFont            m_messageFont;
  610.         DBOOL                m_bInMessageBox;
  611.  
  612.         // This is used to ignore a keyboard message while doing
  613.         // the key configuration stuff.
  614.         DBOOL            m_bIgnoreKeyboardMessage;
  615.  
  616.         HSTRING            m_hCurrentItemName;
  617.         HSTRING            m_hCurrentItemIcon;
  618.         HSTRING            m_hCurrentItemIconH;
  619.         DDWORD            m_nCurrentItemCharge;
  620.         HSTRING            m_hPrevItemIcon;
  621.         DDWORD            m_nPrevItemCharge;
  622.         HSTRING            m_hNextItemIcon;
  623.         DDWORD            m_nNextItemCharge;
  624.  
  625.         int                m_nLastLoadType;
  626.         int                m_nGameType;
  627.  
  628.         DBOOL            m_bNetFriendlyFire;
  629.         DBOOL            m_bNetNegTeamFrags;
  630.         DBOOL            m_bNetOnlyFlagScores;
  631.         DBOOL            m_bNetOnlyGoalScores;
  632.  
  633.         // Inventory item stuff
  634.  
  635.         DBOOL            m_bNightGogglesActive;
  636.         HSOUNDDE        m_hNightGogglesSound;
  637.         HSOUNDDE        m_hTheEyeLoopingSound;
  638.  
  639.         DBOOL            m_bBinocularsActive;
  640.  
  641.         DBOOL            m_bPaused;
  642.  
  643.  
  644.         CMoveMgr*        m_pMoveMgr;
  645.         int                m_nTrapped;
  646.  
  647. #ifdef BRANDED
  648.         HSURFACE        m_hBrandSurface;
  649.         DFLOAT            m_fBrandCounter;
  650. #endif
  651.  
  652.         CMusic::EMusicLevel    m_eMusicLevel;
  653.  
  654.         DDWORD            m_dwAmmo;
  655.         DDWORD            m_dwAltAmmo;
  656.  
  657.         HSTRING            m_hCtfCapturedString1;
  658.         HSTRING            m_hCtfCapturedString2;
  659.  
  660. #ifdef _ADDON
  661.         HSTRING            m_hSoccerGoalString1;
  662.         HSTRING            m_hSoccerGoalString2;
  663. #endif // _ADDON
  664.  
  665.  
  666.         // Reverb parameters
  667.         DBOOL            m_bUseReverb;
  668.         float            m_fReverbLevel;
  669.         float            m_fNextSoundReverbTime;
  670.         DVector            m_vLastReverbPos;
  671.  
  672. };
  673.  
  674.  
  675. // Inlines...
  676.  
  677. inline DBOOL CBloodClientShell::IsMultiplayerTeamBasedGame()
  678. {
  679.     if (m_nGameType == GAMETYPE_CTF) return(DTRUE);
  680.     if (m_nGameType == GAMETYPE_TEAMPLAY) return(DTRUE);
  681.     if (m_nGameType == GAMETYPE_SOCCER) return(DTRUE);
  682.  
  683.     return(DFALSE);
  684. }
  685.  
  686.  
  687. // This is always available, once you create your server shell.
  688. extern CBloodClientShell *g_pBloodClientShell;
  689.  
  690.  
  691. #endif __BLOODCLIENTSHELL_H__